package behavior.template;

/**
 * 模板模式
 * 定义好一整套流程，然后不同的实现类去各自实现
 *
 */
abstract class Game{

    //启动游戏
    protected abstract void  runGame();
    //选择人物，并非所有子类都要实现这个方法，所以没有定义成抽象的
    protected void choosePerson() {};
    //开始玩游戏
    protected abstract void startPlayGame();
    //结束游戏
    protected abstract void endPlayGame();

    //模板方法
    public final void play() {
        runGame();
        choosePerson();
        startPlayGame();
        endPlayGame();
    }

}

